Python编程思想(15):for循环表达式 您所在的位置:网站首页 python的 for循环 Python编程思想(15):for循环表达式

Python编程思想(15):for循环表达式

2023-07-31 06:54| 来源: 网络整理| 查看: 265

李宁老师已经在「极客起源」 微信公众号推出《Python编程思想》电子书,囊括了Python的核心技术,以及Python的主要函数库的使用方法。读者可以在「极客起源」 公众号中输入 160442 开始学习。

《Python编程思想》总目录

《Python编程思想》专栏

for表达式可以利用其他元组、列表等集合对象创建列表。for表达式的语法格式如下:

[表达式 for 循环计数器 in 可迭代对象]

从上面的语法格式可以看出,for表达式与普通for循环的区别有如下两点:

在for关键字之前需要定义一个表达式,该表达式通常会包含循环计数器;

for表达式没有循环体,因此不需要冒号;

for表达式当然也是有循环的,它同样会对可迭代对象进行循环,这一点与普通的for循环没什么两样。for表达式最终返回的是列表,因此for表达式也被称为列表推导式。

下面的代码演示了如何用for表达式创建列表:

示例代码:for_expr1.py

num_range = range(10) # 对num_range执行for表达式 num_list1 = (x + x for x in num_range) # 生成一个生成器 num_list2 = [x + x for x in num_range] for num in num_list1: print(num) # num_range集合包含10个元素 print(num_list2)

这段代码的执行结果如下:

0 2 4 6 8 10 12 14 16 18 [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

上面的代码会对 num_range执行选代,由于 num_range相当于包含10个元素的可迭代对象,因此程序生成的 num_list1和num_list2同样包含10个元素,每个元素都是 num_range中每个元素的2倍(由表达式x+x控制)。

如果将for表达式的方括号改为圆括号,for表达式将不再生成列表,而是生成一个生成器( generator),该生成器不能直接输出相应的值,但可以使用for循环迭代。

还可以在for表达式后面添加if条件,这样for表达式将只迭代那些符合条件的元素。代码如下:

示例代码:for_expr2.py

num_range = range(10) num_list = [x + x for x in num_range if x % 2 == 1] # a_list集合包含10个元素 print(num_list)

上面的代码代码与前面的代码大致相同,只是为for表达式增加了if条件,这样程序只处理 num_range区间的奇数,因此程序生成的列表中只包含5个元素。

执行这段代码,可以看到如下输出结果

[2, 6, 10, 14, 18]

在前面看到的for表达式都是单层循环,实际上for表达式也可以是嵌套循环,代码如下:

示例代码:for_expr3.py

num_list = [(x, y) for x in range(5) for y in range(4)] # num_list列表包含20个元素 print(num_list) last_list = [] for x in range(5): for y in range(4): last_list.append((x, y)) print(last_list)

上面代码中x是遍历 range(5)的计数器,因此x可迭代5次(0到4);y是遍历 range(4)的计数器,因此该y可选代4次(0到3)。所以(x,y)表达式一共会迭代20次。

运行这段代码,可以看到如下输出结果

[(0, 0), (0, 1), (0, 2), (0, 3), (1, 0), (1, 1), (1, 2), (1, 3), (2, 0), (2, 1), (2, 2), (2, 3), (3, 0), (3, 1), (3, 2), (3, 3), (4, 0), (4, 1), (4, 2), (4, 3)] [(0, 0), (0, 1), (0, 2), (0, 3), (1, 0), (1, 1), (1, 2), (1, 3), (2, 0), (2, 1), (2, 2), (2, 3), (3, 0), (3, 1), (3, 2), (3, 3), (4, 0), (4, 1), (4, 2), (4, 3)]

上面的for表达式相当于如下嵌套循环

last_list=[] for x in range(5): for y in range(4): last_list.append((x, y)) print(last_list)

当然,for表达式也支持3层或更多层嵌套,例如如下代码是3层嵌套:

num_list = [[x, y, z] for x in range(5) for y in range(4) for z in range(8)] print(num_list)

num_list列表共包含160个元素。

对于嵌套循环的for表达式,同样可指定if条件。假如我们有一个需求:程序要将两个列表中的数值按“能否整除”的关系配对在一起。比如num_list1列表中包含30,num_list2列表中包含6,其中30可以整除6,这样就可以将30和5配对在一起。对于上面的需求使用for表达式来实现非常简单,代码如下:

num_list1 = [30, 12, 77, 34, 39, 78, 36, 36, 121] num_list2 = [3, 6, 7, 12] # 只要y能整除x,就将它们配对在一起 result = [(x, y) for x in num_list2 for y in num_list1 if y % x == 0] print(result)

运行这段代码,会输出如下结果:

[(3, 30), (3, 12), (3, 39), (3, 78), (3, 36), (3, 36), (6, 30), (6, 12), (6, 78), (6, 36), (6, 36), (7, 77), (12, 12), (12, 36), (12, 36)]

对本文感兴趣的同学可以加微信unitymarvel,或扫描下面二维码加群,然后拖加入技术讨论群。

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有